'''
六大设计原则
1. 开放封闭原则
    定义：对扩展功能来说是开放的，对修改功能来说是封闭的。
    说明：扩展类或对象行为不必修改类本身，类的简单扩展有助于建立新的行为
    优点：
    1. 对现有的类不进行修改，因此退化的可能性很小
    2. 有助于保持以前的代码向后兼容性
2. 控制反转原则
    定义: 高层级模块不应该依赖低层级模块，它们都应该依赖于抽象。细节依赖于抽象，不是抽象依赖于细节
    说明：建议任何两个模块都不应以紧密的方式互相依赖，基本模块和从属模块应该在他们之间有个提供一个抽象层来进行耦合。
        类的细节应该描绘抽象的，某些情况下 细节本身决定了抽象。这种情况应该避免。
    优点：消除了模块之间的耦合性，
        由于依赖模块之间的一个明确的抽象层，因此便于通过更好的方式来处理模块之间的关系。

3. 接口隔离原则
    定义：客户端不应该不依赖它不使用的接口。
    说明:软件开发人员更应该仔细的处理接口。
    优点：提醒开发人员编写'瘦身形'接口，使得方法和接口紧密相连。


4. 单一职责原则
    定义：类的职责单一，引起类的变化的条件单一。
    说明：当我们开发类的时候，它应该为提供特定的服务。如果一个类提供了两个功能那么最好将这个类进行分开。功能才是改变的理由。
    优点：当一个功能发生改变的时候，除了特定的类需要进行改动其他的类基本不许改动。
        此外如果一个类提供了多种功能，那么依赖它的类必定会因为多种原因经历多种修改，这是无法避免的


5. 替换原则
    定义: 派生类必须能够完全取代基类
    说明：开发者编写派生类时，他应该扩展基类，此外它还建议派生类尽可能的对基类进行封装。以至于派生类能够替换基类而无需修改任何代码


设计模式特点： 语言无关，可定制，动态的
设计模式优点：1.在多个项目中可重复使用 2. 问题可以在架构层面解决 3. 经过时间验证，良好证明是开发人员，架构师宝贵的经验 4.他们具有可靠性依赖性。


模式分类
    1. 创建型模式：
        a. 运行机制基于对象创建
        b. 将对象创建的细节隔离开
        c. 代码与创建的类型无关
    2. 结构型模式：
        a. 设计出通过组合获得更强大功能的对象和类的结构
        b. 简化并识别类与对象之间的关系
        c. 主要关注类的组合与继承
    3. 行为型模式：
        a.关注对象之间的交互和响应性
        b.对象之间能够进行交互，但是 保持松散耦合

'''